﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using ArgosMembership.Modelo;
using System.Data.Entity.ModelConfiguration;
using ArgosMembership.Componentes;

namespace ArgosMembership.Contexto
{
    public class SecureModel : DbContext
    {
        public DbSet<Usuario> Usuarios { get; set; }
        public DbSet<Aplicacion> Aplicaciones { get; set; }
        public DbSet<Forma> Formas { get; set; }
        public DbSet<UsuarioForma> UsuariosFormas { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //modelBuilder.Entity<UsuarioForma>().Property(p => p.Permisos).HasColumnName("sm");
        }
    }

    public class SecureContextInitializer : DropCreateDatabaseIfModelChanges<SecureModel>
    {
        protected override void Seed(SecureModel context)
        {
            Usuario usuario = SetUsuario();
            Aplicacion app = SetAplicacion();
            Forma frm = SetForma();
            frm.Aplicacion = app;
            UsuarioForma usfr = SetUserToForm(usuario.Id, frm.Id);


            context.Usuarios.Add(usuario);
            context.Formas.Add(frm);
            context.Aplicaciones.Add(app);
            context.UsuariosFormas.Add(usfr);

            base.Seed(context);
        }

        public Usuario SetUsuario()
        {
            var usuario = new Usuario
            {
                Nombre = "Administrador",
                Password = "123456",
                UserName = "admin",
                Correo = "admin@correo.com",
                FechaCreacion = DateTime.Now,
                Status = 1
            };

            string saltpassword = usuario.UserName + "|" + usuario.Password;

            usuario.Password = Encripcion.Encripta(saltpassword);
            return usuario;
        }

        public Aplicacion SetAplicacion()
        {
            var app = new Aplicacion
            {
                Nombre = "Administrador"
            };
            return app;
        }

        public Forma SetForma()
        {
            var frm = new Forma
            {
                Nombre = "CrearCuenta"
            };
            return frm;
        }

        public UsuarioForma SetUserToForm(int usrId, int frmId)
        {
            var Usrfrm = new UsuarioForma
            {
                FormaId= frmId,
                UsuarioId= usrId,
                Permisos=Enums.Privilegios.Administracion
            };
            return Usrfrm;
        
        }

    }




}
